package pe.com.cotelasa.scp.controlador;

import java.util.ArrayList;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.springframework.context.annotation.Scope;
import org.springframework.util.StringUtils;

import pe.com.cotelasa.scp.controlador.backingBean.BKGuiaDeRemisionIN;
import pe.com.cotelasa.scp.dominio.common.Constantes;
import pe.com.cotelasa.scp.dominio.common.URLPaginacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioMotivo;
import pe.com.cotelasa.scp.dominio.service.IServicioOrdenCompraServicio;
import pe.com.cotelasa.scp.dominio.service.IServicioParametro;
import pe.com.cotelasa.scp.entidad.DetalleGuiaRemision;
import pe.com.cotelasa.scp.entidad.GuiaRemision;
import pe.com.cotelasa.scp.entidad.Motivo;
import pe.com.cotelasa.scp.entidad.OrdenCompraServicio;
import pe.com.cotelasa.scp.entidad.ParametroDetalle;
import pe.com.cotelasa.scp.entidad.Proveedor;
import pe.com.cotelasa.scp.entidad.Sede;

@SuppressWarnings({"serial"})
@Named(value = "MBGuiaDeRemisionIN")
@Scope("request")
public class MBGuiaDeRemisionIN extends MBGuiaDeRemision {

    private static Logger logger = Logger.getLogger(MBGuiaDeRemisionIN.class);
    @Inject
    private BKGuiaDeRemisionIN bkGuiaDeRemisionIN;
    @Inject
    private IServicioOrdenCompraServicio servicioOCS;
    @Inject
    private IServicioParametro servicioParametro;
    @Inject
    private IServicioMotivo servicioMotivo;

    @PostConstruct
    public void createObjectInject() {
        this.bkGuiaDeRemision = bkGuiaDeRemisionIN;
    }

    public MBGuiaDeRemisionIN() {
    }

    public void obtenerDetalleGRemision() {
        /*addDetalleGuiaRemision(guiaRemision.getIdOrdenCompraServicio().
         getDetalleOrdenCompraServicioCollection(), tipo);*/
        if (bkGuiaDeRemision.getGuiaFormulario().getIdOrdenCompraServicio().getId() != 0) {
            try {
                bkGuiaDeRemision.getGuiaFormulario().setIdOrdenCompraServicio(
                        servicioOCS.conseguirOrdenCompraServicioPorId(bkGuiaDeRemision.getGuiaFormulario().getIdOrdenCompraServicio().getId()));
            } catch (ServiceException e) {
                mostrarError("Ocurrieron algunos problemas al actualizar la informacion. Vuelva a intentar.");
                logger.error(e.getMessage(), e);
            }

            if (bkGuiaDeRemision.getGuiaFormulario().getIdOrdenCompraServicio().getTipo() == 'S') {
                buscarMaterialesPorOrden(bkGuiaDeRemision.getGuiaFormulario().getIdOrdenCompraServicio());
            }
            bkGuiaDeRemision.setProveedoGuia(bkGuiaDeRemision.getGuiaFormulario().getIdOrdenCompraServicio().getIdProveedor());

        } else {
            bkGuiaDeRemision.getGuiaFormulario().setIdOrdenCompraServicio(new OrdenCompraServicio(0));
            bkGuiaDeRemision.setProveedoGuia(new Proveedor());
        }
        
        System.out.println("proveedorGuia: "+bkGuiaDeRemision.getProveedoGuia().getRazonSocial());

        bkGuiaDeRemision.getGuiaFormulario().setSedePartida(new Sede());
        bkGuiaDeRemision.getGuiaFormulario().setDetalleGuiaRemisions(new ArrayList<DetalleGuiaRemision>());

        // Luego usare el proveedor lo cargo perezosamente antes que se cierre la conexion
        Hibernate.initialize(bkGuiaDeRemision.getGuiaFormulario().getIdOrdenCompraServicio().getIdProveedor());
    }

    @Override
    public String nuevo() {

        String URL = super.nuevo();
        if (URL.equals("OK")) {
            URL = URLPaginacion.GuiasDeRemision.URL_FORMULARIO_GUIA_REMISION_IN;
            GuiaRemision guiaRemision = bkGuiaDeRemision.getGuiaFormulario();
            /*guiaRemision.setSerie("001");
            guiaRemision.setNumeroGuia("000001");
            bkGuiaDeRemision.setNumeroGuiaFormulario(guiaRemision.getSerie() + "-" + guiaRemision.getNumeroGuia());*/
            try {
                // Guia de Entrada
                bkGuiaDeRemisionIN.setProveedoGuia(new Proveedor());
                guiaRemision.setParametroTipoGuia(servicioParametroDetalle.conseguirParametroDetallePorId(Constantes.TipoGuiaRemision.GUIA_ENTRADA));
                System.out.println("parametro : "+guiaRemision.getParametroTipoGuia().getValCadena());
                guiaRemision.setNombreDestinatario(bkGuiaDeRemision.getEmpresaFormulario().getRazonSocial());
                guiaRemision.setDireccionDestinatario(bkGuiaDeRemision.getEmpresaFormulario().getDireccionLegal());
                guiaRemision.setRucDestinatario(bkGuiaDeRemision.getEmpresaFormulario().getRuc());
                guiaRemision.setDniDestinatario("");
                guiaRemision.setEstaEntregado((short) 1);
                bkGuiaDeRemision.setListaTipoMotivoGuia(new ArrayList<ParametroDetalle>());
                
                for(ParametroDetalle parametro:servicioParametro.listaTipoMotivoGuia()){
                    for(Motivo motivo:servicioMotivo.buscarMotivosPorGrupo(guiaRemision.getParametroTipoGuia().getDesParametroDet())){
                        if(motivo.getDeMotivo().equalsIgnoreCase(parametro.getValCadena())){
                           bkGuiaDeRemision.getListaTipoMotivoGuia().add(parametro); 
                        }
                    }
                    
                }
                
                
            } catch (ServiceException e) {
                mostrarError("Ocurrieron algunos problemas al actualizar la informacion. Vuelva a intentar.");
                logger.error(e.getMessage(), e);
                URL = URLPaginacion.GuiasDeRemision.URL_LISTA_GUIA_REMISION;
            }
        }
        return URL;
    }

    @Override
    public String actualizar() {
        String URL = super.actualizar();
        return URL.equals("NOOK") ? URLPaginacion.GuiasDeRemision.URL_FORMULARIO_GUIA_REMISION_IN : URL;
    }

    @Override
    public String editar() {
        String URL = super.editar();
        return URL.equals("OK") ? URLPaginacion.GuiasDeRemision.URL_FORMULARIO_GUIA_REMISION_IN : URL;
    }

    @Override
    public String guardar() {

        System.out.println("punto de partida: "+bkGuiaDeRemision.getGuiaFormulario().getSedePartida());
        System.out.println("punto de llegada: "+bkGuiaDeRemision.getGuiaFormulario().getSedeLlegada());
        if (bkGuiaDeRemision.getGuiaFormulario().getSedePartida() == null || bkGuiaDeRemision.getGuiaFormulario().getSedePartida().getId() == null) {
            mostrarError("Elija el Punto de Partida.");
            return URLPaginacion.GuiasDeRemision.URL_FORMULARIO_GUIA_REMISION_IN;
        } else if (bkGuiaDeRemision.getGuiaFormulario().getSedeLlegada() == null || bkGuiaDeRemision.getGuiaFormulario().getSedeLlegada().getId() == null) {
            
            System.out.println("entrooo porque no hay llegada.");
            mostrarError("Elija el Punto de Llegada.");
            return URLPaginacion.GuiasDeRemision.URL_FORMULARIO_GUIA_REMISION_IN;
        } else {
            /*System.out.println("numero de serie: " + bkGuiaDeRemision.getNumeroGuiaFormulario());
            String[] numero = StringUtils.split(bkGuiaDeRemision.getNumeroGuiaFormulario(), "-");
            bkGuiaDeRemision.getGuiaFormulario().setSerie(numero[0]);
            System.out.println("serie: " + bkGuiaDeRemision.getNumeroGuiaFormulario());
            bkGuiaDeRemision.getGuiaFormulario().setNumeroGuia(numero[1]);
            System.out.println("Nro de Guia: " + bkGuiaDeRemision.getNumeroGuiaFormulario());
            System.out.println("numero 1: " + bkGuiaDeRemision.getGuiaFormulario().getNumeroGuia());*/
            String URL = super.guardar();
            return URL.equals("NOOK") ? URLPaginacion.GuiasDeRemision.URL_FORMULARIO_GUIA_REMISION_IN : URL;
        }


    }

    @Override
    public String ver() {
        String URL = super.ver();
        return URL.equals("OK") ? URLPaginacion.GuiasDeRemision.URL_VER_GUIA_REMISION_IN : URL;
    }

    public void elegirParametro() {
        bkGuiaDeRemision.getGuiaFormulario().setDetalleGuiaRemisions(new ArrayList<DetalleGuiaRemision>());

    }
}
